<?php

/*
	info: 字符(串)处理静态方法
	base: WEB_CHARSET
	$Id: string.class.php 13 2011-03-25 08:33:49Z lfly1573@gmail.com $
*/

if (!defined('WEB_IN'))
{
	header("HTTP/1.0 404 Not Found");
	exit();
}

final class String
{

	/**
	 * 生成安全字符串
	 * @param $mixVar 要处理的变量，数组或者字符串
	 * @param $bolForce 是否强制处理
	 * @return mix 处理后的内容
	 */
	public static function AddSlashesNew($mixVar, $bolForce = FALSE)
	{
		!defined('MAGIC_QUOTES_GPC') and define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
		if (!MAGIC_QUOTES_GPC || $bolForce)
		{
			if (is_array($mixVar))
			{
				foreach ($mixVar as $key => $val)
				{
					$mixVar[$key] = self::AddSlashesNew($val, $bolForce);
				}
			}
			else
			{
				$mixVar = trim(addslashes($mixVar));
			}
		}
		else
		{
			$mixVar = self::TrimNew($mixVar);
		}
		return $mixVar;
	}

	/**
	 * 检查是否字符串中含有某个字符
	 * @param $strAll 要检查的字符串
	 * @param $strOne 要查找的字符
	 * @param $strComm 分隔符
	 * @return bool 是否含有
	 */
	public static function CheckHaveVar($strAll, $strOne, $strComm = ',')
	{
		return strstr($strComm.$strAll.$strComm, $strComm.$strOne.$strComm) ? TRUE : FALSE;
	}

	/**
	 * 转换email地址
	 * @param $strEmail Email地址
	 * @param $bolLink 是否添加链接
	 * @return string 转换后的内容
	 */
	public static function ConvEmail($strEmail, $bolLink = TRUE)
	{
		$strEmail = str_replace(array('@', '.'), array('&#64;', '&#46;'), $strEmail);
		return $bolLink ? '<a href="mailto:'.$strEmail.'">'.$strEmail.'</a>': $strEmail;
	}

	/**
	 * 将字符中的HTML标识转换
	 * @param $mixVar 要处理的变量
	 * @return mix 处理后的内容
	 */
	public static function ConvHtml($mixVar)
	{
		if (is_array($mixVar))
		{
			foreach ($mixVar as $key => $val)
			{
				$mixVar[$key] = self::ConvHtml($val);
			}
		}
		else
		{
			$mixVar = preg_replace('/&amp;((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1', str_replace(array('&', '"', '\'', '<', '>'), array('&amp;', '&quot;', '&#039;', '&lt;', '&gt;'), trim($mixVar)));
		}
		return $mixVar;
	}

	/**
	 * 转换URL地址
	 * @param $strUrl url地址
	 * @return string 处理后的内容
	 */
	public static function ConvUrl($strUrl)
	{
		$tempReturnStr = '';
		if (trim($strUrl) != '')
		{
			$tempReturnStr = self::ConvHtml(preg_match("/^https?:\/\/.+/i", $strUrl) ? $strUrl : 'http://'.$strUrl);
		}
		return $tempReturnStr;
	}

	/**
	 * 编码可以进行url传递的参数值
	 * @param $strVar 参数内容
	 * @param $boolType 格式 TRUE 编码  FALSE 解码
	 * @return string 处理后的内容
	 */
	public static function ConvUrlParam($strVar, $boolType = TRUE)
	{
		if ($boolType)
		{
			$tempReturnStr = str_replace(array('+', '/', '='), array(',', '_', '.'), base64_encode($strVar));
		}
		else
		{
			$tempReturnStr = base64_decode(str_replace(array(',', '_', '.'), array('+', '/', '='), $strVar));
		}
		return $tempReturnStr;
	}

	/**
	 * 截取字符串
	 * @param $strVar 要截取的内容
	 * @param $intLength 截取的长度
	 * @param $strDot 截取后的显示符号
	 * @return string 截取后的内容
	 */
	public static function CutStr($strVar, $intLength, $strDot = '...')
	{
		$strVarLength = strlen($strVar);
		$strDotLength = strlen($strDot);
		if ($strVarLength <= $intLength)
		{
			return $strVar;
		}

		$strVar = str_replace(array('&quot;', '&lt;', '&gt;', '&nbsp;'), array('"', '<', '>', ' '), $strVar);
		$strcut = '';
		//UTF-8版本特别处理
		if (strtolower(WEB_CHARSET) == 'utf-8')
		{
			$n = $tn = $noc = 0;
			while ($n<$strVarLength && isset($strVar[$n]))
			{
				$t = ord($strVar[$n]);
				if ($t==9 || $t==10 || ($t>=32 && $t<=126))
				{
					$tn = 1; $n++; $noc++;
				}
				elseif ($t>=194 && $t<=223)
				{
					$tn = 2; $n += 2; $noc += 2;
				}
				elseif ($t>=224 && $t<239)
				{
					$tn = 3; $n += 3; $noc += 2;
				}
				elseif ($t>=240 && $t<=247)
				{
					$tn = 4; $n += 4; $noc += 2;
				}
				elseif ($t>=248 && $t<=251)
				{
					$tn = 5; $n += 5; $noc += 2;
				}
				elseif ($t==252 || $t==253)
				{
					$tn = 6; $n += 6; $noc += 2;
				}
				else
				{
					$n++;
				}

				if ($noc >= $intLength-$strDotLength)
				{
					break;
				}
			}
			if ($noc > $intLength-$strDotLength)
			{
				$n -= $tn;
			}
			$strcut = substr($strVar, 0, $n);
		}
		else
		{
			for ($i=0; $i<$intLength-$strDotLength-1; $i++)
			{
				$strcut .= (ord($strVar[$i]) > 127) ? $strVar[$i].$strVar[++$i] : $strVar[$i];
			}
		}
		$strcut = str_replace(array('"', '<', '>'), array('&quot;', '&lt;', '&gt;'), $strcut);

		return $strcut.$strDot;
	}

	/**
	 * 格式化主机地址
	 * @param $strUrl url地址
	 * @param $bolStripWww 是否剔除www前缀
	 * @return string 主机地址
	 */
	public static function FormatHost($strUrl, $bolStripWww = FALSE)
	{
		$tempHost = strtolower(preg_replace("/^(https?:\/\/)?(.+?)(:[0-9]+)?(\/.*)?$/i", "\\2", $strUrl));
		if ($bolStripWww)
		{
			$tempHost = preg_replace("/^www\.(.+?)$/i", "\\1", $tempHost);
		}
		return $tempHost;
	}

	/**
	 * 高亮关键字
	 * @param $strAll 显示的内容
	 * @param $strShow 要高亮的内容，多个空格隔开
	 * @return string 处理后的内容
	 */
	public static function Highlight($strAll, $strShow)
	{
		if (trim($strAll)!='' && trim($strShow)!='')
		{
			$tempStrShowArray = explode(' ', $strShow);
			$tempStrShowMode = array();
			foreach ($tempStrShowArray as $tempShow)
			{
				$tempShow = trim($tempShow);
				if ($tempShow != '')
				{
					$tempStrShowMode[] = "/($tempShow)/i";
				}
			}
			if (count($tempStrShowMode) > 0)
			{
				$strAll = preg_replace($tempStrShowMode, "<span class=\"highlight\">\${0}</span>", $strAll);
			}
		}
		return $strAll;
	}

	/**
	 * html转为js代码
	 * @param $strAll 代码内容
	 * @return string 转换后的内容
	 */
	public static function HtmlToJs($strAll)
	{
		if (!function_exists('HtmlToJsConvFunc'))
		{
			function HtmlToJsConvFunc($strContent, $strJsInfo = '')
			{
				$strContent = str_replace(array('\"', "\r", "\n", "'"), array('"', '', '', "\'"), $strContent);
				$strJsInfo = str_replace('\"', '"', $strJsInfo);
				$strReturn = '';
				if ($strContent != '')
				{
					$strReturn .= "\ndocument.write('{$strContent}');\n";
				}
				if (preg_match("/src\s*\=\s*(?:\"|')(.+?)(?:\"|')/i", $strJsInfo, $tempJsRegs))
				{
					$strReturn .= "\ndocument.write('<scr'+'ipt type=\"text/javascript\" src=\"{$tempJsRegs[1]}\"></scr'+'ipt>');\n";
				}
				return $strReturn;
			}
		}
		$strAll = preg_replace("/(?:^|\s*\<\/script\>)\s*(.*?)\s*(?:\<script(.*?)\>\s*|$)/ies", "HtmlToJsConvFunc('\\1', '\\2')", $strAll);
		$strAll = trim(str_replace("\n\n", "\n", $strAll));
		return $strAll;
	}

	/**
	 * md5改良
	 * @param $strVar 要加密的内容
	 * @return string 加密后的内容
	 */
	public static function Md5New($strVar)
	{
		return ($strVar != '') ? md5('l.f,A-'.md5($strVar).'-Z,l.y') : '';
	}

	/**
	 * 生成随机字符串
	 * @param $intLength 生成的长度
	 * @param $bolNumeric 是否纯数字格式
	 * @return string 随机字符串
	 */
	public static function Random($intLength, $bolNumeric = FALSE)
	{
		if ($bolNumeric)
		{
			$tempHash = sprintf('%0'.$intLength.'d', mt_rand(0, pow(10, $intLength) - 1));
		}
		else
		{
			$tempHash = '';
			$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
			$tempMaxNum = strlen($chars) - 1;
			for ($i = 0; $i < $intLength; $i++)
			{
				$tempHash .= $chars[mt_rand(0, $tempMaxNum)];
			}
		}
		return $tempHash;
	}

	/**
	 * 去除变量前后的空格
	 * @param $mixVar 要处理的变量
	 * @return mix 处理后的内容
	 */
	public static function TrimNew($mixVar)
	{
		if (is_array($mixVar))
		{
			foreach ($mixVar as $key => $val)
			{
				$mixVar[$key] = self::TrimNew($val);
			}
		}
		else
		{
			$mixVar = trim($mixVar);
		}
		return $mixVar;
	}


	/******************************************/


	/* 构造函数 不允许执行 */
	private function __construct(){}

}	//end class

?>